/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 *
 * Copyright 2010 huliqing, huliqing.cn@gmail.com
 *
 * This file is part of QFaces.
 * QFaces is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * QFaces is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with QFaces.  If not, see <http://www.gnu.org/licenses/>.
 *
 * 这个文件是QFaces的一部分。
 * 您可以单独使用或分发这个文件，但请不要移除这个头部声明信息.
 * QFaces是一个自由软件，您可以自由分发、修改其中的源代码或者重新发布它，
 * 新的任何修改后的重新发布版必须同样在遵守LGPL3或更后续的版本协议下发布.
 * 关于LGPL协议的细则请参考COPYING、COPYING.LESSER文件，
 * 您可以在QFaces的相关目录中获得LGPL协议的副本，
 * 如果没有找到，请连接到 http://www.gnu.org/licenses/ 查看并获取副本。
 *
 * - Author: Huliqing
 * - Contact: huliqing.cn@gmail.com
 * - License: GNU Lesser General Public License (LGPL)
 * - Blog and source code availability: http://www.huliqing.name/
 */


package name.huliqing.qfaces.component;

import java.util.Map;
import javax.faces.context.FacesContext;
 
/**
 * 
 * @author huliqing
 */
public interface Ajax {

    /**
     * 
     * @param params 包含所有的请求参数
     * @param fc JSF上下文信息
     */
	void ajax(Map<String, String> params, FacesContext fc);
	
//    /**
//     * 当使用<strong>POST</strong>方式向服务器发送ajax请求时,需要实现<BR />
//     * 这个方法并处理相应逻辑.通过POST方式,可以完全访问整个组件树,<BR />
//     * 访问其中的任何控件及属性,只要知道组件的id(或clientId),<BR />
//     * 可以像下面这样查找组件树中的某一个特定组件:<BR />
//     * UIComponent uic = fc.getViewRoot().findComponent("myComponentId");<BR />
//     * uic = this.findComponent("myComponentId"); <BR />
//     * 通常情况下,如果不需要访问或处理组件树中的其它组件,那么优先建议使用
//     * {@link Ajax#ajaxInvokeOnGet}这个方法.这对提升Ajax性能很有好处!<BR />
//     * 注意:当使用Post方式时,客户端的js请求中必须带有组件的clientId这一参数, 如:<BR />
//     * var ajax = Q.F.Ajax.getAjax(组件id);
//     * ajax.put("clientId", "组件客户端ID");
//     * @param params 
//     * @param fc
//     * @see #ajaxInvokeOnGet(java.util.Map, javax.faces.context.FacesContext) 
//     */
//    void ajaxInvokeOnPost(Map<String, String> params, FacesContext fc);
//    
//    /**
//     * 当使用的是<strong>GET</strong>方式向服务器发送ajax请求时,需要实现这一
//     * 方法,通常情况下只实现一个方法(ajaxInvokeOnGet或是ajaxInvokeOnPost),
//     * 优先建议使用ajaxInvokeOnGet.当使用这个方法时，
//     * 客户端的js请求参数中必须带有组件的componentClass名称,如：<BR />
//     * var ajax = Q.F.Ajax.getAjax(组件id); <BR />
//     * ajax.put("componentClass", "组件完全限定类名");<BR />
//     * 可以从某些js文件中得到一些有用的参考信息,如以下的ajax请求:<BR />
//     * ajax.post(); 这使用的是POST方式 <BR />
//     * ajax.get(); 	这使用的是GET方式 <BR/>
//     * 使用GET方式发送ajax请求时,只发送必要的信息params,相对于POST方式,
//     * GET方式对系统性能较好,POST方式需要将整个组件树的状态信息带回服
//     * 务器端，并且在服务器还需要再恢复状态树，这造成相当的性能损耗
//     * （至少20毫秒的损耗）<BR />
//     * POST除了可以访问整个组件树之外,并没有其它额外的好处。
//     * @param params
//     * @param fc
//     * @see #ajaxInvokeOnPost(java.util.Map, javax.faces.context.FacesContext) 
//     */
//    void ajaxInvokeOnGet(Map<String, String> params, FacesContext fc);
}
